#!/usr/bin/python
# -*- coding: utf8 -*-


#############################################
# Parser para opciones de línea de comandos #
#############################################

from optparse import OptionParser
usage = "%prog [opciones] entrada"
parser = OptionParser(usage=usage)
parser.add_option("-t", "--tipar", dest="tipar", default=False,
                  help="solamente tipar la expresion",
                  action="store_true")
parser.add_option("-s", "--sintaxis", dest="sintaxis", default=False,
                  help="solamente chequear sintaxis",
                  action="store_true")



#############################################
# Main                                      #
#############################################

if __name__ == '__main__':    
    import sys
    from lenguaje import Lenguaje
    from registro import extensiones
    from expresion import TypeException
    
    (options, args) = parser.parse_args()

    # Verifico que se haya recibido un nombre
    # de archivo de entrada
    try:
        fname = args[0]
        assert(fname.strip())
    except:
        print "Debe especificar un archivo de entrada!\n\n" + \
              "Ejecute ./pylc.py -h para ver la ayuda."
        sys.exit(1)

    # Construyo un lenguaje con las extensiones registradas
    lang = Lenguaje(extensiones)

    # Parseo el archivo según las opciones especificadas
    try:
        exp = lang.parseFile(fname)
    except Exception,e:
        print e
        exit(1)
    
    print "Expresion : %s" % exp
    if options.sintaxis:
        print "Sintaxis OK!"
    else:
        try:
            tipo = exp.tipar({})
        except TypeException, e:
            print e
            sys.exit(1)
        
        if options.tipar:
            print "Tipo: %s" % tipo
        else:
			try:
				print "Expresion reducida: %s : %s" % (exp.reducir(),tipo)
			except Exception, e:
				print e
				sys.exit(1)

